package dao

import (
	"fmt"
	"go.uber.org/zap"
	"gopkg.in/yaml.v3"
	"io/ioutil"
)

var Logger *zap.SugaredLogger

// 配置结构体
type loggerConf struct {
	Log struct {
		Level string `yaml:"level"`
	} `yaml:"log"`
}

// 获取配置信息
func (c *loggerConf) getConf() *loggerConf {
	// 读取 configs/application.yaml 文件
	yamlFile, err := ioutil.ReadFile("configs/application.yaml")
	// 如果读取失败，打印错误信息
	if err != nil {
		fmt.Println(err.Error())
	}
	// 将读取的内容解析到 conf 结构体中
	err = yaml.Unmarshal(yamlFile, c)
	if err != nil {
		fmt.Println(err.Error())
	}
	return c
}

// 初始化日志记录器
func InitLogger() (err error) {
	var c loggerConf
	// 获取配置信息
	c.getConf()
	// 根据配置初始化日志记录器
	cfg := zap.NewDevelopmentConfig()
	cfg.Level = zap.NewAtomicLevelAt(zap.InfoLevel)
	switch c.Log.Level {
	case "debug":
		cfg.Level = zap.NewAtomicLevelAt(zap.DebugLevel)
	case "warn":
		cfg.Level = zap.NewAtomicLevelAt(zap.WarnLevel)
	case "error":
		cfg.Level = zap.NewAtomicLevelAt(zap.ErrorLevel)
	case "fatal":
		cfg.Level = zap.NewAtomicLevelAt(zap.FatalLevel)
	}
	logger, err := cfg.Build()
	if err != nil {
		return err
	}
	Logger = logger.Sugar()
	return nil
}
